from stark.service.stark import StarkConfig
from crm_app import models
from django.utils.safestring import mark_safe
from django.shortcuts import reverse
from crm_app.permission.base import BASERbacPermission


class CourseRecordConfig(BASERbacPermission, StarkConfig):
    def display_course_recode_list(self, row=None, header=False):
        if header:
            return "上课记录"

        tpl = "%s s%sday%s" % (row.class_obj.course.name, row.class_obj.semester, row.day_num)
        return tpl

    def display_study_recode(self, row=None, header=False):
        if header:
            return "学习记录"

        url = reverse("stark:crm_app_studyrecord_changelist")
        return mark_safe("<a href='%s?ccid=%s'>学习记录</a>" % (url, row.id))

    def get_list_display(self):
        val = super().get_list_display()
        val.remove(StarkConfig.display_del)  # 默认公户不显示删除操作
        val.insert(0, StarkConfig.display_checkbox)
        return val

    def multi_init(self, request):
        """批量初始化学习记录"""
        id_list = request.POST.getlist("pk")
        # 找到选中上课记录的班级
        # 找到班级下所有人
        # 为每一个人生成一个学习记录
        for nid in id_list:
            # 获取选中的课程记录
            course_record_obj = models.CourseRecord.objects.get(id=nid)
            # 获取课程下的所有学生
            stu_list = models.Student.objects.filter(class_list=course_record_obj.class_obj)
            # 判断该课程下的该次学习记录是否已存在
            exists = models.StudyRecord.objects.filter(course_record=course_record_obj).exists()
            if exists:
                # 存在就不再创建学习记录
                continue

            study_record_list = []
            # 为每一个人生成一个学习记录
            for stu in stu_list:
                study_record = models.StudyRecord(course_record=course_record_obj, student=stu)
                study_record_list.append(study_record)

            models.StudyRecord.objects.bulk_create(study_record_list)

    multi_init.text = "批量初始化"

    action_list = [multi_init]

    list_display = [display_course_recode_list, display_study_recode]
